<?php
/**
 * MYSQL数据库操作函数库
 * @author z.En Wong
 * @version 1.0
 * @data 07/14/2009
 *
 */
//define('DB_HOST',"localhost");
//
//define('DB_USERNAME',"root");
//
//define('DB_PASSWORD',"root");
//
//define('DB_DBNAME',"zb");


/**
 * 数据库连接函数
 *
 * @param String $database_name 数据库名,默认为配置文件内的数据库名
 * @param Boolean $is_pconnect 是否使用不间断的pconnect连接,默认为使用
 * @return mysql link
 */
function db_connect($database_name=null,$is_pconnect=null,$new_link=false){
	$mysql_link=null;
	
	if ($is_pconnect===null) {
		
		$is_pconnect=DB_IS_PCONNECT;//如果没有连接类型，就从配制文件里读
	}
	
	if ($is_pconnect) {
		
		$mysql_link = mysql_pconnect(DB_HOST,DB_USERNAME,DB_PASSWORD);
	}else {
		
		$mysql_link = mysql_connect(DB_HOST,DB_USERNAME,DB_PASSWORD,$new_link);
	}
	
	if (empty($database_name)) {//如果没有数据库名,就从配制文件里读
		
		$database_name=DB_DBNAME;
	}
	
	mysql_select_db($database_name,$mysql_link);
	
	$GLOBALS['db']=&$mysql_link;//存放最近的一个数据库连接
	$GLOBALS['db_p']=$is_pconnect;//是否是不间断连接
	
	return $mysql_link;
}

/**
 * 数据库关闭函数
 *
 * @param mysql_link $mysql_link 数据库连接,默认为NULL
 */
function db_close($mysql_link=null){
	
	if (empty($GLOBALS['db'])) {//如果DB连接为空,就直接返回
		return null;
	}
	if (empty($mysql_link)) {
		
		return mysql_close();
	}else {
		
		return mysql_close($mysql_link);
	}
}

/**
 * 修改数据库连接字符集
 *
 * @param string $charset
 */
function db_charset($charset=null,$mysql_link=null){
	if (empty($GLOBALS['db'])) {

		db_connect();
	}
	
	if (empty($charset)) {
		$charset=DB_CHAR_SET;
	}
	
//	$GLOBALS['db_q_count']++;
	
	if ($mysql_link) {
		return mysql_query("SET character_set_connection={$charset}, character_set_results={$charset}, character_set_client=binary",$mysql_link);
		
	}
	return mysql_query("SET character_set_connection={$charset}, character_set_results={$charset}, character_set_client=binary");

}

/**
 * 从结果集中取得数据的函数(mysql_fetch_assoc)
 *
 * @param res $res 结果集
 * @return array
 */
function db_fetch($res){
	
	$a=array();

	while ($row = mysql_fetch_assoc($res)) {
		
		$a[] = $row;
	}
	
	return $a;
}

/**
 * 增加了自动连接功能的 mysql_query别名函数
 *
 * @param STRING $sql
 * @param mysql_link $mysql_link
 * @return RES or boolean
 */
function db_query($sql,$mysql_link=null){
	if (empty($GLOBALS['db'])) {

		db_connect();
	}
	
	$GLOBALS['db_q_count']++;

	$GLOBALS['db_sql']=$sql;
	
	if (empty($mysql_link)) {
	
		return mysql_query($sql);
	}

	return mysql_query($sql,$mysql_link);
	
}


/**
 * 查询数据,得到结果集
 *
 * @param String $table_name 表名
 * @param String $items 字段名
 * @param String $where 条件
 * @param Mysql_link $mysql_link 数据库连接(可选)
 * @return RES 结果集
 */
function db_get($table_name,$items='',$other='',$mysql_link=null){
	if (empty($GLOBALS['db'])) {

		db_connect();
	}
	
	if (empty($items)) {
		$items=' * ';
	}
	
	$sql="SELECT {$items} FROM `{$table_name}`  {$other}";
	
	$GLOBALS['db_q_count']++;

	$GLOBALS['db_sql']=$sql;
	
	if ($mysql_link) {
	
		return mysql_query($sql,$mysql_link);
	}

	return mysql_query($sql);
	
}
/**
 * 修改数据
 *
 * @param String $table_name 表名
 * @param Array $data_array 用来修改的数据
 * @param String $where 条件
 * @param Mysql_link $mysql_link 数据库连接(可选)
 * @return Boolean 
 */
function db_set($table_name,$data_array,$where,$mysql_link=null){
	if (empty($GLOBALS['db'])) {

		db_connect();
	}
	
	$sql="UPDATE `{$table_name}` SET  ";
	
	foreach ($data_array as $key=>$value){
		
		$sql.="`{$key}`='".mysql_escape_string($value)."',";
//		$sql.="`{$key}`= {$value} ,";
	}
	$sql=trim($sql,',');
	
	$sql.="  WHERE  {$where} ";
	
	$GLOBALS['db_q_count']++;
	
	$GLOBALS['db_sql']=$sql;

	if ($mysql_link) {
			
		return mysql_query($sql,$mysql_link);
	}

	return mysql_query($sql);
	
}

/**
 * 插入数据
 *
 * @param String $table_name 表名
 * @param Array [][] $data_array 需要插入的数据(可以使用一维或二维数组)
 * @param Mysql_link $mysql_link 数据库连接(可选)
 * @return Boolean 
 */
function db_into($table_name,$data_array,$mysql_link=null){
	if (empty($GLOBALS['db'])) {

		db_connect();
	}
	
	$sql='';
	
	if (is_array($data_array[0])) { //如果是二维数组
		
//		mysql_query('allowMultiQueries=true',$mysql_link);//让mysql允许多条语句执行

		$GLOBALS['db_sql']='';

		foreach ($data_array as $item_data){
			
			$db_key="";
			$db_value="";
			
			foreach ($item_data as $key=>$value){
				
				 $db_key.="`{$key}`,";
				 
				 $db_value.="'".mysql_escape_string($value)."',";
//				 $db_value.=" {$value} ,";
			}
			
			$db_key=trim($db_key,',');
			$db_value=trim($db_value,',');
			
			$sql="INSERT INTO `{$table_name}` ( {$db_key} ) VALUES ( {$db_value} )  ";
			
			$GLOBALS['db_q_count']++;

			$GLOBALS['db_sql'].=$sql.";\n";

			if ($mysql_link) {
				mysql_query($sql,$mysql_link);
				
			}else {
				mysql_query($sql);
				
			}
				
		}
		
		if (mysql_errno()==0) {
			
			return true;
			
		}
		
	}else{  //如果是一维数组
		
		$db_key="";
		$db_value="";
		
		foreach ($data_array as $key=>$value){

			$db_key.="`{$key}`,";
			 
			$db_value.="'".mysql_escape_string($value)."',";
//			$db_value.=" {$value} ,";
		}
		
		$db_key=trim($db_key,',');
		$db_value=trim($db_value,',');
		
		$sql="INSERT INTO {$table_name} ( {$db_key} ) VALUES ( {$db_value} ) ";
		
		$GLOBALS['db_q_count']++;

		$GLOBALS['db_sql']=$sql;

		if ($mysql_link) {
			return mysql_query($sql,$mysql_link);
			
		}else {
			return mysql_query($sql);
			
		}
	}

	
}

/**
 * 删除数据
 *
 * @param String $table_name 表名
 * @param String $where 条件
 * @param Mysql_link $mysql_link 数据库连接(可选)
 * @return Boolean
 */
function db_del($table_name,$where,$mysql_link=null){
	if (empty($GLOBALS['db'])) {

		db_connect();
	}
	
	$sql="DELETE  FROM  `{$table_name}`  WHERE  {$where}";
	
	$GLOBALS['db_q_count']++;
	
	$GLOBALS['db_sql']=$sql;

	if ($mysql_link) {
		
		return mysql_query($sql,$mysql_link);	
	}else {
		
		return mysql_query($sql);
	}
	
}

function db_error_debug($mysql_link=null){

	if ($mysql_link) {
		echo '<br /><center><hr /><h1>DB_ERRORS_NUMBER:( <font color="#ff0000">'.mysql_errno($mysql_link).'</font> )</h1>';
		echo '<h1>DB_ERRORS_STRING:( <font color="#ff0000">'.mysql_error($mysql_link).'</font> )</h1><hr /></center><br />';
	}else{
		echo '<br /><center><hr /><h1>DB_ERRORS_NUMBER:( <font color="#ff0000">'.mysql_errno().'</font> )</h1>';
		echo '<h1>DB_ERRORS_STRING:( <font color="#ff0000">'.mysql_error().'</font> )</h1><hr /></center><br />';
	}
	
}


/**
 * 分页函数
 *
 * @param Int $data_count 数据总条数
 * @param Int $per_page_count 分页后每页的条数
 * @param Int $now_page_num 当前页码
 * @return Array array(0 "page_count"=>分页后页面总数, 1 "now_first"=>当前页的第一条记录在数据库中的顺序号, 2 "page_num"=>当前的页码,3 "data_count"=>记录总条数)
 */
function db_data_pagination__($data_count,$per_page_count,$now_page_num=1){
	//数据总条数,分页后每页的条数,当前页码
	$page_count=intval($data_count/$per_page_count);
	if ($data_count%$per_page_count!==0) {
		//总页数
		$page_count++;
	}
	if (empty($now_page_num)) {
		$now_page_num = 1;
	}else{
		$now_page_num=intval($now_page_num);
		if ($now_page_num<0) {
			$now_page_num = $page_count - (abs($now_page_num)-1);
		}
		if ($now_page_num<=0) {
			$now_page_num = 1;
		}
		if ($now_page_num>$page_count) {
			$now_page_num = $page_count;
		}
	}

	//本页第一条记录的记录号
	$now_page_first=($now_page_num-1)*$per_page_count;
	if ($now_page_first<0) {
		$now_page_first=0;
	}
	//0=>分页后页面总数，1=>当前页的第一条记录在数据库中的顺序号，2=>当前的页码，3=>记录总条数
	return array(0=>$page_count,'page_count'=>$page_count,
				 1=>$now_page_first,'now_first'=>$now_page_first,
				 2=>$now_page_num,'page_num'=>$now_page_num,
				 3=>$data_count,'data_count'=>$data_count);
}

/**
 * 返回加前缀的表名
 *
 * @param unknown_type $table_name
 * @return unknown
 */
function db_table_name_get($table_name){
	
	return DB_PREFIX.$table_name;
}


?>